package gov.pr.celepar.sentinela.client.pojo;

import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;

public class Funcao implements Serializable, Comparable<Funcao> {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1443788515530755151L;

	private long codFuncao;

	private long codSistema;

	private Funcao funcaoPai;

	private boolean publica;

	private String urlServidor;

	private String nome;

	private String url;

	private String descricao;

	private int ordemMenu;

	private String operacoesGrupo;

	private boolean bloqueada;

	private boolean generica;

	private boolean auxiliar;

	private boolean juncaoMenus;

	private boolean logAtivo;

	private Collection<Parametro> parametros;

	/**
	 * @return Returns the codFuncao.
	 */
	public long getCodFuncao() {
		return this.codFuncao;
	}

	/**
	 * @param codFuncao
	 *            The codFuncao to set.
	 */
	public void setCodFuncao(long codFuncao) {
		this.codFuncao = codFuncao;
	}

	public void setBloqueada(boolean b) {
		this.bloqueada = b;
	}

	public boolean isBloqueada() {
		return this.bloqueada;
	}

	/**
	 * @return Returns the descricao.
	 */
	public String getDescricao() {
		return this.descricao;
	}

	/**
	 * @param descricao
	 *            The descricao to set.
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	/**
	 * @return Returns the nome.
	 */
	public String getNome() {
		return this.nome;
	}

	/**
	 * @param nome
	 *            The nome to set.
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * @return Returns the ordemMenu.
	 */
	public int getOrdemMenu() {
		return this.ordemMenu;
	}

	/**
	 * @param ordemMenu
	 *            The ordemMenu to set.
	 */
	public void setOrdemMenu(int ordemMenu) {
		this.ordemMenu = ordemMenu;
	}

	/**
	 * @return Returns the publica.
	 */
	public boolean isPublica() {
		return this.publica;
	}

	/**
	 * @param publica
	 *            The publica to set.
	 */
	public void setPublica(boolean publica) {
		this.publica = publica;
	}

	/**
	 * @return Returns the url.
	 */
	public String getUrl() {
		return this.url;
	}

	/**
	 * @param url
	 *            The url to set.
	 */
	public void setUrl(String url) {
		this.url = url;
	}

	/**
	 * @return Returns the urlServidor.
	 */
	public String getUrlServidor() {
		return this.urlServidor;
	}

	/**
	 * @param urlServidor
	 *            The urlServidor to set.
	 */
	public void setUrlServidor(String urlServidor) {
		this.urlServidor = urlServidor;
	}

	public Funcao getFuncaoPai() {
		return this.funcaoPai;
	}

	public void setFuncaoPai(Funcao funcaoPai) {
		this.funcaoPai = funcaoPai;
	}

	public boolean equals(Object obj) {
		Funcao f = (Funcao) obj;
		return getCodFuncao() == f.getCodFuncao();
	}

	public boolean isGenerica() {
		return this.generica;
	}

	public void setGenerica(boolean generica) {
		this.generica = generica;
	}

	public boolean isAuxiliar() {
		return auxiliar;
	}

	public void setAuxiliar(boolean auxiliar) {
		this.auxiliar = auxiliar;
	}

	public String getOperacoesGrupo() {
		return this.operacoesGrupo;
	}

	public void setOperacoesGrupo(String operacoesGrupo) {
		this.operacoesGrupo = removeRepetidos(operacoesGrupo);
	}
	
	private String removeRepetidos(String x){
		if(x == null)
			return x;
		String z = "";
		for(int i=0; i<x.length(); i++){
			char c = x.charAt(i);
			if(!z.contains(c+""))
				z += c;
		}
		return z;
	}

	public long getCodSistema() {
		return this.codSistema;
	}

	public void setCodSistema(long codSistema) {
		this.codSistema = codSistema;
	}

	public boolean isJuncaoMenus() {
		return juncaoMenus;
	}

	public void setJuncaoMenus(boolean juncaoMenus) {
		this.juncaoMenus = juncaoMenus;
	}

	public boolean isLogAtivo() {
		return logAtivo;
	}

	public void setLogAtivo(boolean logAtivo) {
		this.logAtivo = logAtivo;
	}

	public Collection<Parametro> getParametros() {
		return parametros;
	}

	public void setParametros(Collection<Parametro> parametros) {
		this.parametros = parametros;
	}

	public int compareTo(Funcao o) {
		if (this.getOrdemMenu() < o.getOrdemMenu())
			return -1;
		else if (this.getOrdemMenu() > o.getOrdemMenu())
			return 1;
		return 0;
	}

	public boolean compararParametros(Collection parametros) {
		Iterator itr = (Iterator) parametros.iterator();
		Parametro parametro = null;
		boolean ehIgual = false;
		while (itr.hasNext()) {
			parametro = (Parametro) itr.next();
			ehIgual = this.getParametros().equals(parametro);
			if (ehIgual)
				return ehIgual;
		}

		return ehIgual;
	}

}